/*
 * PeliculaSerializable.cpp
 *
 *  Created on: 11/09/2010
 *      Author: ?
 */

#include "EntidadSerializable.h"

#include <iostream>
#include <string>
#include <vector>
using std::string;
using namespace std;

EntidadSerializable::EntidadSerializable ( int unID , string unRotulo )
{
	setID( unID );
	setRotulo( unRotulo );
	inicializarAsociados();
}

void EntidadSerializable::setID( int unID )
{
	id = unID;
}

void EntidadSerializable::setRotulo( string unRotulo )
{
	// copia hasta P_MAX_CARACT_ROTULO caracteres del rotulo en el campo homonimo.
	int largo = unRotulo.size();
	largo = ( largo < P_MAX_CARACT_ROTULO ? largo : ( P_MAX_CARACT_ROTULO - 1 ) );
	// const char *miRotulo = unRotulo.data();
	// strncpy( rotulo, miRotulo, largo );
	unRotulo.copy( rotulo , largo );
	rotulo[ largo ] = '\0';
}

void EntidadSerializable::inicializarAsociados( )
{
	// Llena todos los espacios del vector con IDs inválidos (es decir, cero).
	int i;
	for ( i = 0 ; i < P_MAX_IDASOCIADOS ; i++ )
	{
		asociados[ i ] = 0; // Con cero vamos a identificar un ID inválido.
	}
}

vector<int> EntidadSerializable::getAsociados()
{
	int i = 0;
	vector<int> unVector;
	while ( asociados[ i ] != 0)
	{
		unVector.push_back( asociados[ i ] );
		i++;
	}

	return unVector;
}

int EntidadSerializable::getID()
{
	return id;
}

string EntidadSerializable::getRotulo()
{
	return rotulo; // esto funciona?
}

void EntidadSerializable::agregarAsociado( int nuevoAsociado )
{
	int i = 0;

	// Saltea todas las posiciones que ya estan ocupadas por actores.
	while( asociados[ i ] != 0 )
	{
		i++;
	}

	// En la primera posicion no ocupada ingresa el nuevo actor
	asociados[ i ] = nuevoAsociado;
}
